var fish; (function(u, K) {
    function E(d) {
        var l = function() {};
        l.prototype = d;
        return new l
    }
    function I(d, l, f) {
        if (l && d) {
            var p, k;
            for (k in l) if (null != (p = l[k]) || f) d[k] = p;
            return d
        }
    }
    var f, v = {
        anim: {
            v: "0.1",
            g: "201206110"
        },
        mTab: {
            v: "0.1",
            g: "20120608"
        },
        mCal: {
            v: "0.4",
            css: 1,
            g: "20120713"
        },
        preventInput: {
            parent: "mCal"
        },
        recoverInput: {
            parent: "mCal"
        },
        mSlider: {
            v: "0.1",
            css: 1,
            g: "20120620"
        },
        mPop: {
            v: "0.1",
            css: 1,
            g: "20120608"
        },
        lazyLoad: {
            v: "0.1",
            g: "20120620"
        },
        template: {
            v: "0.2",
            g: "2013080101"
        }
    },
    w = {
        debug: "fwd.",
        product: "",
        branch: "product",
        baseUrl: function() {
            for (var d = document.getElementsByTagName("script"), l = d.length, f = baseUrl = ""; l--&&!(f = d[l].src, -1 < f.indexOf("fish.")););
            return (baseUrl = f.match(/.*(?=fish\.)/g)) ? baseUrl[0] + "module/": ""
        } (),
        fmJs: "{model}/{version}/{model}.{branch}js?v={generation}",
        fmCss: "{model}/{version}/{model}.css?v={generation}",
        combine: !0,
        spriteInterval: 0,
        fmCombineFn: function(d) {
            for (var l = 0,
            f = d.length; l < f; l++) d[l] = d[l].replace("http://js.40017.cn/cn/min/??", "");
            return "http://js.40017.cn/cn/min/??" + d.join(",")
        }
    }; [].forEach || (Array.prototype.forEach = function(d, l) {
        var f = this.length || 0,
        p = 0;
        if ("function" == typeof d) for (; p < f; p++) d.call(l, this[p], p, this)
    });
    Array.prototype.indexOf || (Array.prototype.indexOf = function(d) {
        var f, n;
        f = 0;
        for (n = this.length; f < n; f++) if (this[f] === d) return f;
        return - 1
    });
    var O = /^\s+/,
    P = /\s+$/;
    /\s/.test("\u00a0") || (O = /^[\s\xA0]+/, P = /[\s\xA0]+$/);
    var U = String.prototype.trim ?
    function(d) {
        return void 0 === d || "" === d ? "": String.prototype.trim.apply(d)
    }: function(d) {
        return void 0 === d || "" === d ? "": d.toString().replace(O, "").replace(P, "")
    },
    t; (function() {
        function d(d) {
            return U(d.replace(/\s+/g, " ")).split(" ")
        }
        var l = [],
        n = {},
        p = {
            js: {
                name: [],
                url: [],
                timer: null
            },
            css: {
                name: [],
                url: [],
                timer: null
            }
        },
        k = u.getElementsByTagName("script")[0],
        r = /{branch}/g,
        h = /{model}/g,
        Q = /{generation}/g,
        q = /{version}/g;
        t = {
            STATE: {
                UNLOAD: 0,
                LOADING: 1,
                LOADED: 2
            },
            uList: v,
            execs: l,
            listener: n,
            load: function(C, z, n, h) {
                C = d(C).sort();
                var p = 0,
                A, q;
                if (z) {
                    var k = "_" + C.join("_") + "_";
                    l[k] || (l[l[l.length] = k] = []);
                    for (var y = 0,
                    r = C.length; y < r; y++) A = C[y],
                    f[A] && !f[A]._sprite_ && (p++, l[k][A] = !0);
                    l[k].push([z, n, h]);
                    l[k].num = C.length;
                    l[k].now = p;
                    if (C.length === p) {
                        _pipe.exec(k);
                        return
                    }
                }
                C.forEach(function(d) {
                    q = v[d];
                    t.state(d) < t.STATE.LOADING || t.state(d) === t.STATE.LOADED && fish[d]._sprite_ ? q.parent ? t.load(q.parent) : (_pipe.newElem("js", d, _pipe.parseUrl("fmJs", d, q)), q.css && _pipe.newElem("css", d, _pipe.parseUrl("fmCss", d, q)), t.state(d, t.STATE.LOADING), _pipe.eventExec(d, "loading")) : t.state(d) === t.STATE.LOADED && _pipe.exec(d)
                })
            },
            extend: function(d) {
                t.state(d, t.STATE.LOADED);
                _pipe.eventExec(d, "loaded");
                _pipe.exec(d)
            },
            on: function(d, f, l) {
                var h = n[d],
                h = h || {};
                h[f] = h[f] || [];
                h[f].push(l);
                n[d] = h
            },
            remove: function(d, f, l) {
                if (n[d] && n[d][f]) a: {
                    d = n[d][f];
                    for (f = d.length; f--;) if (d[f] === l) {
                        d.splice(f, 1);
                        break a
                    }
                }
            },
            state: function(f, l) {
                for (var h, n = d(f), p = 0, q = n.length; p < q; p++) if (h = n[p], v[h]) if (l) v[h].parent ? this.state(v[h].parent, l) : v[h].state = l;
                else return (h = v[h].parent ? this.state(v[h].parent) : v[h].state) ? h: this.STATE.UNLOAD
            }
        };
        _pipe = {
            exec: function(h) {
                for (var n, p, q, k = d(h).sort(), A, r = 0, u = k.length; r < u; r++) {
                    q = k[r];
                    for (A = l.length; A--;) if (h = l[A], -1 < h.indexOf("_" + q + "_") && !l[h][q] && (l[h][q] = !0, l[h].now++), l[h].now >= l[h].num) {
                        for (n = l[h]; p = n.shift();) setTimeout(function(d, f, l) {
                            return function() {
                                "function" === typeof d[0] ? d[2] ? d[0].apply(d[1] ? d[1] : l, d[2]) : d[0].apply(d[1] ? d[1] : l) : f[d[0]] && !f[d[0]]._sprite_ && f[d[0]].apply(d[1], d[2])
                            }
                        } (p, f, K), 0);
                        l.splice(A, 1);
                        l[h] = null
                    }
                }
            },
            parseUrl: function(d, f, l) {
                d = w[d].replace(h, f).replace(q, l.v).replace(Q, l.g);
                return w.baseUrl + d.replace(r, w[w.branch])
            },
            eventExec: function(f, l) {
                for (var h, p, q = d(f), k, r = 0, u = q.length; r < u; r++) if (name = q[r], n[name] && n[name][l]) {
                    h = n[name][l];
                    for (k = h.length; p = h[--k];) p()
                }
            },
            newElem: function(d, f, l, h) {
                function n() {
                    var f, q = p[d].name.join(" "),
                    r = w.combine ? 1 < p[d].url.length ? w.fmCombineFn(p[d].url) : p[d].url[0] : l;
                    if (r) {
                        switch (d) {
                        case "css":
                            f = u.createElement("link");
                            f.rel = "stylesheet";
                            f.type = "text/css";
                            break;
                        case "js":
                            f = u.createElement("script"),
                            f.async = !0,
                            f.type = "text/javascript"
                        }
                        f.onreadystatechange = f.onload = function() {
                            var d = f.readyState;
                            if (!d || /loaded|complete/.test(d)) f.onreadystatechange = null,
                            "function" === typeof h && h(q)
                        };
                        switch (d) {
                        case "css":
                            f.href = r;
                            break;
                        case "js":
                            f.src = r
                        }
                        k.parentNode.insertBefore(f, k);
                        p[d].name = [];
                        p[d].url = [];
                        p[d].timer = null
                    }
                }
                w.combine ? (p[d].timer && clearTimeout(p[d].timer), p[d].timer = setTimeout(n, w.spriteInterval), p[d].name.push(f), p[d].url.push(l)) : n()
            }
        }
    })();
    var L = [],
    x = {
        cores: {},
        link: function() {
            for (var d = x.cores.sprite = x.sprite.fn,
            f = 0; f < L.length; f++) d = E(d),
            I(d, L[f].fn),
            x.cores[L[f].name] = d;
            return d
        },
        append: function(d, f) {
            x.cores[d] || (x.cores[d] = !0, L.push({
                name: d,
                fn: f
            }))
        },
        roe: function() {
            return E(x.cores.exec)
        },
        sprite: {
            init: function() {
                for (name in v) if (!this.fn[name] || this.fn[name] && !this.fn[name]._sprite_) this.fn[name] = function(d) {
                    var f = function() {
                        t.load(d, d, this, arguments)
                    };
                    f._sprite_ = !0;
                    return f
                } (name)
            },
            fn: {}
        },
        combine: function(d) {
            w.combine = d
        },
        branch: function(d) {
            null != w[d] && (w.branch = d)
        },
        config: function(d) {
            I(v, d);
            this.sprite.init()
        },
        pipe: t,
        extend: function(d, f, n) { (d = x.cores[d]) && I(d, f);
            var p;
            if (!n) for (p in f) t.extend(p)
        }
    };
    x.sprite.init();
    x.append("exec", {});
    f = fish = x.link();
    x.extend("exec", {
        guid: function() {
            var d = function() {
                return (65536 * (1 + Math.random()) | 0).toString(16).substring(1)
            };
            return d() + d() + "-" + d() + "-" + d() + "-" + d() + "-" + d() + d() + d()
        },
        lang: {
            extend: I,
            proto: E
        },
        extend: function(d, f) {
            x.extend("exec", d, f)
        },
        trim: U,
        require: function() {
            for (var d = arguments,
            f, n, p, k, r = 1; r < d.length; r++) switch (typeof d[r]) {
            case "string":
                switch (d[r]) {
                case "loaded":
                    f = "loaded";
                    break;
                case "ready":
                    f = "ready"
                }
                break;
            case "number":
                n = d[r];
                break;
            case "function":
                p = d[r]
            }
            k = function() {
                t.load(d[0], p)
            };
            if (n) setTimeout(function() {
                if (f) fish[f](k);
                else k()
            },
            n);
            else if (f) fish[f](k);
            else k()
        }
    });
    f.admin = x;
    f.inWater = !0; (function() {
        function d() {
            p || (p = !0, n("ready"))
        }
        function f() {
            d();
            old = !0;
            n("loaded")
        }
        function n(d) {
            if ("ready" === d) for (; k.length;) k.shift()();
            else if ("loaded" === d) for (; r.length;) r.shift()()
        }
        var p = old = !1,
        k = [],
        r = [];
        u.addEventListener ? (u.addEventListener("DOMContentLoaded", d, !1), K.addEventListener("load", f, !1)) : u.attachEvent && (function() {
            var f = u.documentElement;
            if (f.doScroll) try {
                f.doScroll("left");
                if (!u.body) throw "body has not ready";
                d()
            } catch(l) {
                setTimeout(arguments.callee, 10)
            }
        } (), K.attachEvent("onload", f));
        fish.extend({
            ready: function(d) {
                "function" === typeof d && (p ? d() : k.push(d))
            },
            loaded: function(d) {
                "function" === typeof d && (old ? d() : r.push(d))
            }
        },
        !0)
    })(); (function() {
        function d(a, b, e, c) {
            a: {
                var g, m = [];
                if (void 0 === b) g = u;
                else if (1 === b.nodeType || 9 === b.nodeType) g = b;
                else if (1 === b.length && 1 === b[0].nodeType) g = b[0];
                else {
                    b = void 0;
                    break a
                }
                if ("string" === typeof a && "" !== a) {
                    if (g && a) {
                        b = {
                            selectors: a,
                            context: g
                        };
                        break a
                    }
                } else {
                    if (a && (1 === a.nodeType || 9 === a.nodeType || a === K) && void 0 === b) {
                        m.push(a);
                        b = {
                            result: m
                        };
                        break a
                    }
                    if ("object" === typeof a && "function" !== typeof a && a.length && void 0 === b) {
                        c ? m.push(a[0]) : m = a;
                        b = {
                            result: m
                        };
                        break a
                    }
                }
                b = void 0
            }
            a = [];
            if (b) {
                if (b.selectors && b.context) return "querySelectorAll" === e ? (c ? (e = b.context.querySelector(b.selectors)) && a.push(e) : a = b.context.querySelectorAll(b.selectors), a) : b;
                if (b.result) return b.result
            }
        }
        function l(a, b) {
            var e, c = [],
            g,
            m = a,
            s = [];
            do
            if (b.exec(""), e = b.exec(m)) if (m = e[3], s.push(e[1]), e[2]) {
                g = e[3];
                break
            }
            while (e);
            return g ? ((0 === g.indexOf(",") || g.indexOf(",") === g.length - 1) && M.error(), c.concat([s], l(g, b))) : [s]
        }
        function n(a, b) {
            var e = a["#"],
            c = a.tag,
            g = a[":"],
            m = a["."];
            return e && !n.checkWithId(e, b) || c && !n.checkWithType(c, b) || g && !n.checkWithPseudo(g, b) || m && !n.checkWithClassName(m, b) ? !1 : !0
        }
        function p(a, b, e, c) {
            function g(a) {
                var b = [];
                for (a = a.firstChild; a;) 1 === a.nodeType && b.push(a),
                a = a.nextSibling;
                return b
            }
            function m(a, b) {
                var c = [];
                do
                if ((a = a.nextSibling) && 1 === a.nodeType) if (c.push(a), "+" === b) break;
                while (null !== a);
                return c
            }
            var s = b = 0,
            d, f = [];
            a = M.splitSelectors(a);
            var l = a["#"],
            h = a.tag,
            p = null,
            F = s = null;
            if (l && 1 < l.length) return f;
            for (; s = e[b]; b++) {
                switch (c) {
                case ">":
                    d = g(s);
                    p = a;
                    break;
                case "":
                    l ? (d = Q(l[0], s), p = k(a, "#")) : (d = h ? q(h[0], s) : q("*", s), p = k(a));
                    break;
                case "+":
                    d = m(s, "+");
                    p = a;
                    break;
                case "~":
                    d = m(s),
                    p = a
                }
                for (s = 0; F = d[s]; s++) n(p, F) && f.push(F)
            }
            return f = C(f, "union")
        }
        function k(a, b) {
            var e = {
                ":": a[":"],
                ".": a["."],
                "[]": a["[]"]
            },
            c = e["."],
            g = [],
            m = 0,
            s;
            if (c.length) {
                for (; s = c[m]; m++) g.push(" " + s.substring(1) + " ");
                e["."] = g
            }
            switch (b) {
            case "#":
                e.tag = a.tag
            }
            return e
        }
        function r(a, b) {
            var e = a["#"],
            c = a.tag,
            g = a[":"],
            m = a["."],
            s = null,
            s = [];
            if (e) {
                if (1 < e.length) return s;
                s = k(a, "#");
                return h(e, b, s, "#")
            }
            if (c) return s = k(a),
            h(c, b, s, "tag");
            if (g) return s = k(a),
            h(g, b, s, ":");
            if (m) return s = k(a),
            h(m, b, s, ".")
        }
        function h(a, b, e, c) {
            var g = 0,
            m = [],
            s = [];
            switch (c) {
            case "#":
                m = Q(a[0], b);
                break;
            case "tag":
                m = q(a[0], b);
                break;
            case ":":
                var d = a[0];
                b = q("*", b);
                m = 0;
                a = b.length;
                var f;
                c = [];
                switch (d) {
                case ":first-child":
                    for (; m !== a;) {
                        if ("html" !== b[m].nodeName.toLowerCase()) {
                            d = b[m];
                            for (f = d.previousSibling; null !== f && 1 !== f.nodeType;) f = f.previousSibling;
                            f || c.push(d)
                        }
                        m++
                    }
                    break;
                case ":last-child":
                    for (; m !== a;) {
                        if ("html" !== b[m].nodeName.toLowerCase()) {
                            d = b[m];
                            for (f = d.nextSibling; null !== f && 1 !== f.nodeType;) f = f.nextSibling;
                            f || c.push(d)
                        }
                        m++
                    }
                }
                m = c;
                break;
            case ".":
                if (1 < a.length) m = q("*", b);
                else {
                    m = a[0];
                    b = b.getElementsByTagName("*");
                    m = " " + m.substring(1) + " ";
                    a = [];
                    for (d = b.length; d--;) c = " " + b[d].className + " ",
                    -1 < c.indexOf(m) && a.unshift(b[d]);
                    m = a
                }
            }
            for (; b = m[g]; g++) n(e, b) && s.push(b);
            return s
        }
        function Q(a, b) {
            var e = null,
            c = []; (e = document.getElementById(a.substring(1))) && c.push(e);
            return c
        }
        function q(a, b) {
            var e = b.getElementsByTagName(a);
            if ("*" === a) {
                for (var c = [], g = 0, m = e.length; g !== m;) 1 === e[g].nodeType && c.push(e[g]),
                g++;
                return c
            }
            return e
        }
        function C(a, b) {
            var e = [],
            c = !1,
            g,
            m,
            d;
            if (1 === a.length) return a;
            for (; a.length;) {
                m = a.shift();
                d = a.length;
                for (g = 0; g < d;) m === a[g] && (a.splice(g, 1), g--, c = !0),
                g++; ! c && "diff" === b ? e.push(m) : c && "same" === b ? e.push(m) : "union" === b && e.push(m);
                c = !1
            }
            return e
        }
        function z(a, b) {
            for (var e = 0,
            c = b.length; e != c; e++) a[e] = b[e];
            a.length = c;
            return a
        }
        function t(a, b, e) {
            var c = a;
            "function" == typeof a && (c = a.call(b, e));
            return c
        }
        function V(a, b) {
            if ("string" == typeof a) {
                var e = document.createElement("div");
                e.innerHTML = a;
                return e
            }
            e = document.createElement("div");
            e.appendChild(a);
            return e
        }
        function x(a) {
            var b, e = [],
            c,
            g = E.length;
            I.innerHTML = "<div style='" + a + "'></div>";
            for (b = I.childNodes[0].style; g--;) if (c = b[E[g]]) e[e[e.length] = E[g]] = c;
            a = a.replace(/-([a-z])/g,
            function(a, b) {
                return b.toUpperCase()
            });
            a = a.split(";");
            for (g = 0; g < a.length; g++) b = a[g].split(":"),
            b[0] && -1 === L.indexOf(" " + f.trim(b[0].toLowerCase() + " ")) && (c = f.trim(b[0]), e[e[e.length] = c] = f.trim(b[1]));
            return e
        }
        function A(a) {
            var b = /\S/;
            a.each(function(a) {
                for (var c = a.firstChild,
                g = -1,
                m; c;) {
                    m = c.nextSibling;
                    if (3 == c.nodeType && !b.test(c.nodeValue)) try {
                        a.removeChild(c)
                    } catch(d) {
                        c = m;
                        continue
                    } else null != c.nodeIndex && (c.nodeIndex = ++g);
                    c = m
                }
            })
        }
        function v(a) {
            var b = a.charAt(0);
            return "." === b ? (a = a.substring(1),
            function(b) {
                return f.one(b).hasClass(a)
            }) : "#" === b ? (a = a.substring(1),
            function(b) {
                return b.id === a
            }) : function(b) {
                return b.tagName.toLowerCase() === a
            }
        }
        function w(a, b, e) {
            var c = /\s(\d+):?(\d+)?:?(\d+)?/,
            g;
            if ("object" === typeof a && null !== a) var c = a.getFullYear(),
            m = a.getMonth() + 1,
            d = a.getDate(),
            f = a.getHours(),
            l = a.getMinutes(),
            h = a.getSeconds();
            else a = a ? a: "",
            g = c.exec(a),
            h = a.split("-"),
            c = parseInt(h[0], 10),
            m = parseInt(h[1], 10),
            d = parseInt(h[2], 10),
            h = l = f = 0,
            g && (g[1] && (f = parseInt(g[1], 10)), g[2] && (l = parseInt(g[2], 10)), g[3] && (h = parseInt(g[3], 10)));
            var n = new Date;
            g = {
                years: 0,
                months: 0,
                days: 0,
                hours: 0,
                minutes: 0,
                seconds: 0,
                timeMode: null
            };
            if (c && m && d) return fish.lang.extend(g, b),
            c += g.years,
            m += g.months,
            d += g.days,
            f += g.hours,
            l += g.minutes,
            h += g.seconds,
            h = new Date(c, m - 1, d, f, l, h),
            c = h.getFullYear(),
            m = h.getMonth() + 1,
            d = h.getDate(),
            f = h.getHours(),
            l = h.getMinutes(),
            h = h.getSeconds(),
            m = 10 > m ? "0" + m: m,
            d = 10 > d ? "0" + d: d,
            f = 10 > f ? "0" + f: f,
            l = 10 > l ? "0" + l: l,
            h = 10 > h ? "0" + h: h,
            g = g.timeMode ? g.timeMode.replace("YYYY", c).replace("MM", m).replace("DD", d).replace("hh", f).replace("mm", l).replace("ss", h) : [c, m, d].join("-"),
            g = e ? {
                y: c,
                m: m,
                d: d,
                h: f,
                mi: l,
                s: h
            }: g;
            if (!arguments.callee.hasCallOnce) return arguments.callee.hasCallOnce = !0,
            arguments.callee([n.getFullYear(), n.getMonth() + 1, n.getDate()].join("-"), b, e)
        }
        function y() {
            var a = document.body,
            b = document.createElement("div"),
            e,
            c,
            g;
            e = {
                position: "absolute",
                top: 0,
                left: 0,
                margin: 0,
                border: 0,
                width: "1px",
                height: "1px",
                visibility: "hidden"
            };
            for (c in e) b.style[c] = e[c];
            b.innerHTML = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
            a.insertBefore(b, a.firstChild);
            e = b.firstChild;
            c = e.firstChild;
            g = e.nextSibling.firstChild.firstChild;
            this.doesNotAddBorder = 5 !== c.offsetTop;
            this.doesAddBorderForTableAndCells = 5 === g.offsetTop;
            c.style.position = "fixed";
            c.style.top = "20px";
            this.supportsFixedPosition = 20 === c.offsetTop || 15 === c.offsetTop;
            c.style.position = c.style.top = "";
            e.style.overflow = "hidden";
            e.style.position = "relative";
            this.subtractsBorderForOverflowNotVisible = -5 === c.offsetTop;
            this.doesNotIncludeMarginInBodyOffset = 0 !== a.offsetTop;
            a.removeChild(b)
        }
        n.checkWithId = function(a, b) {
            a = a[0].substring(1);
            return b.id === a ? !0 : !1
        };
        n.checkWithType = function(a, b) {
            a = a[0];
            return b.nodeName.toLowerCase() === a || "*" === a ? !0 : !1
        };
        n.checkWithPseudo = function(a, b) {
            for (var e = 0,
            c, g, m = 0; c = a[e]; e++) switch (g = b, c) {
            case ":first-child":
                do {
                    if (g.previousSibling && 1 === g.previousSibling.nodeType) {
                        m--;
                        break
                    }
                    g = g.previousSibling
                } while ( null !== g );
                g || m++;
                break;
            case ":last-child":
                do {
                    if (g.nextSibling && 1 === g.nextSibling.nodeType) {
                        m--;
                        break
                    }
                    g = g.nextSibling
                } while ( null !== g );
                g || m++
            }
            return 0 < m ? !0 : !1
        };
        n.checkWithClassName = function(a, b) {
            var e = 0,
            c, g = b.className;
            if (0 === g.length) return ! 1;
            for (g = " " + g + " "; c = a[e]; e++) if (0 > g.indexOf(c)) return ! 1;
            return ! 0
        };
        n.checkWithAttribute = function(a, b) {};
        var M = {
            match: {
                type: /^(?:[a-z]+[1-6]?|[*])/g,
                id: /#-*[_a-zA-Z][-_a-zA-Z0-9]*/g,
                className: /\.-*[_a-zA-Z][-_a-zA-Z0-9]*/g,
                pseudo: /:(?:(?:first|last)-child|lang\(\s*[a-z]{2,2}(?:-[a-zA-Z]{2,2})?\s*\))/g,
                attribute: /\[\s*-*[_a-zA-Z][-_a-zA-Z0-9]*(?:\s*[~|]?=\s*(?:(['"])[^'"]+\1|-*[_a-zA-Z][-_a-zA-Z0-9]*))?\s*\]/g,
                specialAttributeMap: {
                    "class": "className",
                    "for": "htmlFor"
                }
            },
            relation: /[>+~](?!=|.*["'])/g,
            isCombinatorValid: function(a) {
                var b = this.relation,
                e = a.length,
                c, g, m;
                for ((b.test(a[0].charAt(0)) || b.test(a[e - 1].charAt(a[e - 1].length - 1))) && this.error(); e--;) c = a[e],
                g = a[e - 1],
                m = a[e + 1],
                b.test(c) && (b.test(g) || b.test(m)) && this.error()
            },
            splitSelectors: function(a) {
                var b = a.match(this.match.id) || "",
                e = a.match(this.match.type) || "",
                c = a.match(this.match.className) || "",
                g = a.match(this.match.pseudo) || "",
                m = a.match(this.match.attribute) || "",
                d = a.match(this.relation) || ""; ((b.length ? b.join("") : b) + (e.length ? e.join("") : e) + (c.length ? c.join("") : c) + (g.length ? g.join("") : g) + (m.length ? m.join("") : m) + (d.length ? d.join("") : d)).length !== a.length && M.error();
                return {
                    "#": b,
                    tag: e,
                    ".": c,
                    ":": g,
                    "[]": m,
                    rel: d
                }
            },
            error: function() {
                throw Error("\u9009\u62e9\u5668\u8bed\u6cd5\u9519\u8bef\uff01");
            }
        },
        R = u.querySelectorAll && u.getElementsByClassName ?
        function(a, b, e) {
            var c = f.admin.roe();
            a = d(a, b, "querySelectorAll", e);
            return ! a || 0 === a.length ? (c.length = 0, c) : z(c, a)
        }: function(a, b, e) {
            var c = f.admin.roe(),
            g = 0,
            m,
            s,
            h = [];
            if (b = d(a, b, void 0, e)) if (b.selectors && b.context) a = b.context,
            b = b.selectors;
            else return z(c, b);
            else return c.length = 0,
            c;
            b = l(b, /((?::[-a-z]+(?:\([-a-zA-z]+\))?|\[(?:[^\[\]'"]+|['"][^'"]*['"])+\]|[^ >+~,\[\]():]+)+|[>+~])(\s*,\s*)?((?:.)*)/g);
            for (m = b.length; g !== m; g++) M.isCombinatorValid(b[g]);
            for (g = 0; g !== m; g++) {
                a: {
                    s = b[g];
                    for (var n = a,
                    q = void 0,
                    k = void 0,
                    k = void 0,
                    u = s.length,
                    F = 0,
                    y = []; F !== u;) {
                        q = s[F];
                        k = M.splitSelectors(q);
                        if (0 === F) y = r(k, n);
                        else if (k = "string" === typeof k.rel ? k.rel: k.rel[0], "" !== k && (q = s[++F]), y = p(q, n, y, k), 0 === y.length) {
                            s = y;
                            break a
                        }
                        F++
                    }
                    s = y
                }
                h = h.concat(s)
            }
            e && (h = h[0] ? [h[0]] : h);
            return 1 === m ? z(c, h) : z(c, C(h, "union"))
        },
        I = document.createElement("div"),
        L = " webkittransform otransform mstransform moztransform ",
        E = ["webkitTransform", "OTransform", "msTransform", "MozTransform"],
        S = {
            remove: function(a) {
                a.parentNode.removeChild(a)
            },
            outer: function(a, b) {
                b.parentNode.replaceChild(a, b)
            },
            top: function(a, b) {
                b.insertBefore(a, b.firstChild)
            },
            bottom: function(a, b) {
                b.insertBefore(a, null)
            },
            before: function(a, b) {
                b.parentNode.insertBefore(a, b)
            },
            after: function(a, b) {
                b.parentNode.insertBefore(a, b.nextSibling)
            }
        },
        J = {},
        B = {
            hook: "fish" + (Math.random() + "").replace(/\D/, ""),
            id: 1
        },
        T = {},
        D = {
            splice: [].splice,
            all: function(a, b) {
                return R(a, b)
            },
            dom: function(a, b) {
                return R(a, b, !0)[0] || null
            },
            one: function(a, b) {
                return R(a, b, !0)
            },
            isElement: function(a, b) {
                return 1 === a.nodeType && (void 0 === b ? !0 : a.tagName.toLowerCase() === b)
            },
            getParent: function(a) {
                var b = this[0];
                if (b) {
                    do
                    if ((b = b.parentNode) && fish.all(b).hasClass(a.substring(1))) return fish.all(b);
                    while (null !== b)
                }
                a = f.admin.roe();
                a.length = 0;
                return a
            },
            parent: function(a) {
                function b(a) {
                    for (var b = 0; b < c && e[b] !== a; b++);
                    b === c && (e[c++] = a)
                }
                if (0 === this.length) return this;
                var e = f.admin.roe(),
                c = 0,
                g;
                e.length = 0;
                "string" === typeof a && ("" !== a && !/\s+/.test(a)) && (a = v(a));
                if (void 0 === a) g = function(a) {
                    a.parentNode && b(a.parentNode)
                };
                else if ("number" === typeof a) g = function(a, c) {
                    for (var e = 0; e < c && a; e++) a = a.parentNode;
                    a && b(a)
                };
                else if ("function" === typeof a) g = function(a, c) {
                    for (a = a.parentNode; a && !c(a);) a = a.parentNode;
                    a && b(a)
                };
                else return e;
                this.each(function(b, c) {
                    g(b, a)
                });
                e.length = c;
                return e
            },
            add: function(a) {
                var b = this.length;
                if (f.isElement(a)) this[b++] = a;
                else if (a.length) for (var e = 0,
                c = a.length; e < c; e++) f.isElement(a[e]) && (this[b++] = a[e]);
                this.length = b;
                return this
            },
            clear: function(a, b) {
                function e(a, b) {
                    var e = c(a, b),
                    g = e,
                    d = a.length;
                    if ( - 1 < e) {
                        for (; g < d - 1;) a[g] = a[g + 1],
                        g++;
                        a.length--
                    }
                }
                function c(a, b) {
                    var c = -1;
                    b = fish.dom(b);
                    a.each(function(a, e) {
                        if (this == b) return c = e,
                        !1
                    });
                    return c
                }
                if (0 == arguments.length) {
                    for (var g = this.length; g--;) delete this[g];
                    this.length = 0;
                    delete this.object;
                    return this
                }
                b = b ? b: this;
                var d = null,
                g = null;
                if ("function" === typeof a) d = a,
                b.each(function() {
                    d() && e(b, this)
                });
                else if ("string" === typeof a || "object" === typeof a && a.inWater || "object" === typeof a && 1 === a.nodeType) g = fish.all(a),
                g.each(function() {
                    e(b, this)
                })
            },
            each: function(a) {
                for (var b = 0,
                e = this.length; b < e && !1 !== a.call(this[b], this[b], b, this); ++b);
                return this
            },
            hasClass: function(a) {
                if (!a || !this[0]) return ! 1;
                for (var b, e, c = 0; c < this.length; c++) {
                    e = f.trim(t(a, this[c], c)).split(/\s+/);
                    b = " " + f.trim(this[c].className) + " ";
                    for (var g = e.length; g--;) if ( - 1 === b.indexOf(" " + e[g] + " ")) return ! 1
                }
                return ! 0
            },
            addClass: function(a) {
                for (var b, e, c = 0; c < this.length; c++) {
                    b = f.trim(t(a, this[c], c)).split(/\s+/);
                    e = " " + f.trim(this[c].className) + " ";
                    for (var g = 0,
                    d = b.length; g < d; g++)~e.indexOf(" " + b[g] + " ") || (e += b[g] + " ");
                    this[c].className = f.trim(e)
                }
                return this
            },
            removeClass: function(a) {
                for (var b, e, c = 0; c < this.length; c++) {
                    b = f.trim(t(a, this[c], c)).split(/\s+/);
                    e = " " + f.trim(this[c].className) + " ";
                    for (var g = 0; g < b.length; g++) e = e.replace(" " + b[g] + " ", " ");
                    this[c].className = f.trim(e)
                }
                return this
            },
            replaceClass: function(a, b) {
                if ("string" !== typeof a || "string" !== typeof b || /^\s*$/.test(a)) return this;
                var e = RegExp("(^|\\s+)" + a + "(\\s+|$)");
                this.each(function() {
                    this.className && (this.className = this.className.replace(e, "$1" + b + "$2"))
                });
                return this
            },
            toggleClass: function(a) {
                this.each(function(b) {
                    b = f.one(b);
                    b.hasClass(a) ? b.replaceClass(a, "") : (b = b[0], b.className = b.className + " " + a)
                });
                return this
            },
            contains: function(a, b) {
                var e = u.documentElement;
                if (e.contains || e.compareDocumentPosition) {
                    var e = 9 === a.nodeType ? a.documentElement: a,
                    c = b && b.parentNode;
                    return a === c || !(!c || !(1 === c.nodeType && (e.contains ? e.contains(c) : a.compareDocumentPosition && a.compareDocumentPosition(c) & 16)))
                }
                if (b) for (; b = b.parentNode;) if (a === b) return ! 0;
                return ! 1
            },
            indexOf: function(a) {
                for (var b = 0,
                e = this.length; b < e; b++) if (this[b] === a) return b;
                return - 1
            },
            data: function(a, b) {
                if (this.length) {
                    for (var e, c, g = 0,
                    d = this.length; g < d; g++) {
                        e = this[g]; (c = e[B.hook]) || (c = e[B.hook] = B.id++); (e = T[c]) || (e = T[c] = {});
                        if (void 0 === a) return e;
                        if ("object" === typeof a) f.lang.extend(e, a);
                        else if ("string" === typeof a) {
                            if (void 0 === b) return e[a];
                            e[a] = b
                        }
                    }
                    return this
                }
            },
            removeData: function(a) {
                if (this.length) {
                    for (var b, e, c = 0,
                    g = this.length; c < g; c++) if (b = this[c], b = b[B.hook])(e = T[b]) && ("string" === typeof a ? delete e[a] : a.forEach && a.forEach(function(a) {
                        delete e[a]
                    }));
                    return this
                }
            },
            on: function(a, b, e) {
                if (!b) return this;
                var c, g;
                null != this.length ? (c = this, e && (g = !0)) : c = fish.all(e);
                if (0 === c.length) return this;
                var d = function() {
                    if (c[0].addEventListener) return function(a, b, c) {
                        a.addEventListener(b, c, !1)
                    };
                    if (c[0].attachEvent) return function(a, b, c) {
                        a.attachEvent("on" + b, c)
                    }
                } ();
                c.each(function(c, h) {
                    var l = function(a) {
                        return function(c) {
                            if (g) {
                                var d = f.all(e, a);
                                c = f.getEvent(c);
                                for (var m = f.getTarget(c); m && m !== a;) {
                                    if ( - 1 !== d.indexOf(m)) {
                                        c.delegateTarget = m;
                                        b.apply(a, [c]);
                                        break
                                    }
                                    m = m.parentNode
                                }
                            } else b.apply(a, [c])
                        }
                    } (c);
                    l[B.hook] = [b, e];
                    var n = c[B.hook],
                    p;
                    n || (n = c[B.hook] = B.id++); (p = B[n]) || (p = B[n] = {});
                    p[a] || (p[a] = []);
                    p[a].push(l);
                    d(c, a, l)
                });
                return this
            },
            off: function(a, b, e) {
                if (!b) return this;
                var c = null != this.length ? this: fish.all(e);
                if (0 === c.length) return this;
                var g = function() {
                    if (c[0].addEventListener) return function(a, b, c) {
                        a.removeEventListener(b, c, !1)
                    };
                    if (c[0].attachEvent) return function(a, b, c) {
                        a.detachEvent("on" + b, c)
                    }
                } ();
                c.each(function(c, d) {
                    var f = c[B.hook],
                    h;
                    if (f && (f = B[f]) && (f = f[a])) {
                        for (h = f.length; h--;) if (f[h][B.hook][0] === b && f[h][B.hook][1] === e) {
                            g(c, a, f[h]);
                            break
                        } - 1 !== h && f.splice(h, 1)
                    }
                });
                return this
            },
            delegate: function(a, b, e) {
                return 0 === this.length ? this: this.on(b, e, a)
            },
            undelegate: function(a, b, e) {
                return this.off(b, e, a)
            },
            hover: function(a, b) {
                for (var e, c = 0; c < this.length; c++) e = this[c],
                function(c) {
                    f.on("mouseover",
                    function(b) {
                        var e = f.getRelated(b); (!e || c !== e && !f.contains(c, e)) && a && a.call(c, b)
                    },
                    c);
                    f.on("mouseout",
                    function(a) {
                        var e = f.getRelated(a); (!e || c !== e && !f.contains(c, e)) && b && b.call(c, a)
                    },
                    c)
                } (e)
            },
            ajax: function(a) {
                function b() {
                    if (4 == c.readyState && (200 <= c.status && 300 >= c.status || 304 == c.status)) {
                        clearTimeout(a.timer);
                        var b = c.responseText;
                        "json" === g && (b = (new Function("return " + b))());
                        f && f(b);
                        a.cache && (J[k] = b)
                    } else 4 == c.readyState && (clearTimeout(a.timer), q || (h && h(), q = !0))
                }
                function e(a, b) {
                    var c = a;
                    b && (0 > a.indexOf("?") ? c += "?": "?" != a.charAt(a.length - 1) && (c += "&"), c += b);
                    return c
                }
                var c = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest,
                g = a.type ? a.type: "string",
                d = a.openType ? a.openType: "get",
                f = a.fn,
                h = a.err,
                l = a.onTimeout,
                n = !0 === a.sync ? !1 : !0,
                p = a.timeout ? a.timeout: 16E3,
                q = !1,
                k = a.url,
                r;
                if (k) {
                    0 < k.indexOf("#") && (k = k.substring(0, k.indexOf("#")));
                    0 < k.indexOf("?") && k.indexOf("?") == k.length - 1 && (k = k.substring(0, k.indexOf("?")));
                    var y = !1,
                    u = !1,
                    z = !1;
                    if ("jsonp" === a.type) {
                        k = e(k, a.data);
                        y = !0;
                        d = a.jsonpCallback ? a.jsonpCallback: "tc" + parseInt(1E11 * Math.random());
                        r = e(k, ("string" === typeof a.jsonp && "" !== a.jsonp ? a.jsonp: "callback") + "=" + d);
                        if (a.jsonpCallback) if (a.cache) {
                            if (void 0 !== J[k]) {
                                window[d](J[k]);
                                return
                            }
                        } else r += "&iid=" + (new Date).getTime();
                        window[d] = function(b) {
                            u || (f && f(b), a.cache && void 0 === J[k] && (J[k] = b), clearTimeout(a.timer))
                        };
                        var t = document.createElement("script");
                        t.type = "text/javascript";
                        t.src = r;
                        t.async = n;
                        document.getElementsByTagName("head")[0].appendChild(t)
                    } else if ("script" === a.type) k = e(k, a.data),
                    t = document.createElement("script"),
                    t.type = "text/javascript",
                    t.onreadystatechange = t.onload = function() {
                        var a = t.readyState;
                        if (!a || /loaded|complete/.test(a)) t.onreadystatechange = t.onload = null,
                        f && "function" === typeof f && f()
                    },
                    t.src = k,
                    t.async = n,
                    document.getElementsByTagName("head")[0].appendChild(t);
                    else if ("get" === d) {
                        k = e(k, a.data);
                        z = !0;
                        r = k;
                        if (a.cache) {
                            if (void 0 !== J[k]) {
                                a.fn && a.fn(J[k]);
                                return
                            }
                        } else r = e(k, "iid=" + Math.random());
                        c.open(d, r, n);
                        c.onreadystatechange = b;
                        // c.send(null)
                    } else "post" === d && (z = !0, c.open(d, k, n), c.onreadystatechange = b, c.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), c.send(a.data));
                    a.timer = setTimeout(function() {
                        z && 4 !== c.readyState && (l && l(), c.abort(), q || (h && h(), q = !0));
                        y && !q && (h && h(), q = u = !0)
                    },
                    p);
                    return c
                }
            },
            getEvent: function(a) {
                return a ? a: K.event
            },
            getTarget: function(a) {
                a = f.getEvent(a);
                return a.target || a.srcElement
            },
            stopBubble: function(a) {
                a = f.getEvent(a);
                a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
            },
            getRelated: function(a) {
                a = f.getEvent(a);
                switch (a.type) {
                case "mouseover":
                    return a.relatedTarget || a.fromElement;
                default:
                    return a.relatedTarget || a.toElement
                }
            },
            preventDefault: function(a) {
                a = f.getEvent(a);
                a.preventDefault ? a.preventDefault() : a.returnValue = !1
            },
            getKeyCode: function(a) {
                a = f.getEvent(a);
                return a.keyCode ? a.keyCode: a.which ? a.which: a.charCode
            },
            valida: {
                email: function(a) {
                    return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/.test(f.trim(a))
                },
                phone: function(a) {
                    return /^(13|14|15|18|17)[0-9]{9}$/.test(f.trim(a))
                }
            },
            css: function() {
                function a(a) {
                    var e = "";
                    if ("string" === typeof a) e = a;
                    else if ("object" === typeof a) for (var c in a) a.hasOwnProperty(c) && (e += c + ":" + a[c] + ";");
                    var d = x(e);
                    return this.each(function(a) {
                        for (var b = d.length; b--;) a.style[d[b]] = d[d[b]]
                    })
                }
                a.normalize = x;
                return a
            } (),
            getCss: function(a) {
                return this[0] && (this[0].currentStyle ? this[0].currentStyle[a] : u.defaultView.getComputedStyle(this[0], null).getPropertyValue(a))
            },
            cookie: {
                set: function(a, b, e) {
                    var c = a;
                    if ("string" === typeof a) {
                        var d = arguments,
                        c = {};
                        c.name = d[0];
                        c.value = d[1];
                        c.days = d[2];
                        c.path = d[3];
                        c.domain = d[4];
                        c.encode = d[5]
                    }
                    if (null != c.value) {
                        d = new Date;
                        c.days && d.setDate(d.getDate() + parseInt(c.days, 10));
                        c.hours && d.setHours(d.getHours() + parseInt(c.hours, 10));
                        c.minutes && d.setMinutes(d.getMinutes() + parseInt(c.minutes, 10));
                        c.seconds && d.setSeconds(d.getSeconds() + parseInt(c.seconds, 10));
                        var d = !c.days && !c.hours && !c.minutes && !c.seconds ? "": "; expires=" + d.toGMTString(),
                        f = c.value; ! 1 != c.encode && (f = encodeURIComponent(c.value));
                        d = c.name + "=" + f + d;
                        c.path && (d += ";path=" + c.path);
                        c.domain && (d += ";domain=" + c.domain);
                        u.cookie = d
                    }
                },
                get: function(a, b) {
                    if (u.cookie && "" != u.cookie) {
                        var e, c;
                        c = null;
                        for (var d = document.cookie.split(";"), m = 0; m < d.length; m++) {
                            var h = f.trim(d[m]);
                            if (h.substring(0, a.length + 1) == a + "=") {
                                if (b) c = h.substring(a.length + 1);
                                else try {
                                    c = decodeURIComponent(h.substring(a.length + 1))
                                } catch(l) {
                                    c = ""
                                }
                                break
                            }
                        }
                        if (c) try {
                            e = decodeURIComponent(c)
                        } catch(k) {
                            e = c
                        }
                        if (b && c) {
                            c = c.split("&");
                            e = null;
                            for (m = 0; m < c.length; m++) if (c[m] = f.trim(c[m]), c[m].substring(0, b.length + 1) == b + "=") {
                                try {
                                    e = decodeURIComponent(c[m].substring(b.length + 1))
                                } catch(n) {
                                    e = ""
                                }
                                break
                            }
                        }
                        return e
                    }
                },
                remove: function(a, b) {
                    var e = f.cookie.get(a);
                    void 0 !== e && null !== e && (e = {
                        name: a,
                        value: "",
                        days: -1
                    },
                    f.lang.extend(e, b), f.cookie.set(e))
                }
            },
            attr: function(a, b) {
                return null != b ? (this.each(function(e) {
                    e.setAttribute(a, b)
                }), this) : this[0] && this[0].getAttribute(a)
            },
            val: function(a) {
                return null != a ? (this.each(function(b) {
                    b.value = a
                }), this) : this[0] && this[0].value
            },
            effect: function(a) {
                function b(a) {
                    a["_effect_" + l + "_"] = !0
                }
                function e() {
                    "none" === k.getCss("display") && (h.interFn && h.interFn.call(k), h.interShow && k.css("display:block"))
                }
                function c() {
                    "block" === k.getCss("display") && (h.outerFn && h.outerFn.call(k), h.outerHide && k.css("display:none"))
                }
                function d() {
                    clearTimeout(n);
                    n = setTimeout(e, 0)
                }
                function m() {
                    clearTimeout(n);
                    n = setTimeout(c, 0)
                }
                var h = {
                    elem: "",
                    type: "click",
                    interShow: !0,
                    outerHide: !0,
                    interFn: null,
                    outerFn: null
                };
                f.lang.extend(h, a);
                var l = f.guid(),
                k = this;
                a = f.all(h.elem);
                var n;
                a.each(b);
                this.each(b);
                switch (h.type) {
                case "click":
                    f.one(document).on("click",
                    function(a) {
                        for (a = f.getTarget(a); a && !a["_effect_" + l + "_"];) a = a.parentNode;
                        a ? d() : c()
                    });
                    break;
                case "hover":
                    a.hover(d, m);
                    this.hover(d, m);
                    break;
                case "focusBlur":
                    a.on("focus", d),
                    a.on("blur", m)
                }
                return this
            },
            html: function(a, b) {
                var e = "inner outer top bottom remove before after".split(" ");
                A(this);
                if (0 == arguments.length) return this[0] ? this[0].innerHTML: void 0;
                1 == arguments.length && "remove" != arguments[0] && (b = a, a = "inner");
                if (2 == arguments.length && !~e.indexOf(a)) return this;
                if ("remove" != a && b && void 0 !== b.each) {
                    if ("inner" == a) {
                        var c = document.createElement("p");
                        b.each(function(a) {
                            c.appendChild(a)
                        });
                        this.each(function(a) {
                            a.innerHTML = c.innerHTML
                        })
                    } else {
                        var d = this;
                        b.each(function(b) {
                            d.html(a, b)
                        })
                    }
                    return this
                }
                return this.each(function(c) {
                    var e, d = 0;
                    if ("inner" == a) if ("string" == typeof b || "number" == typeof b) {
                        c.innerHTML = b;
                        c = c.getElementsByTagName("SCRIPT");
                        for (e = c.length; d < e; d++) eval(c[d].text)
                    } else c.innerHTML = "",
                    c.appendChild(b);
                    else if ("remove" == a) S[a](c);
                    else if (d = V(b, -1 < ["outer", "top", "bottom"].toString().indexOf(a) ? c: c.parentNode), e = d.childNodes, S[a]) {
                        S[a](d, c);
                        for (c = d.parentNode; e.length;) c.insertBefore(e[0], d);
                        c.removeChild(d)
                    }
                })
            },
            browser: function(a, b) {
                if (a) {
                    var e = !0;
                    a !== H.name && (e = !1);
                    b && (a === H.name && b !== parseInt(H.version, 10)) && (e = !1);
                    return e
                }
                return H
            },
            parseTime: function(a, b, e) {
                w.hasCallOnce = !1;
                return w(a, b, e)
            },
            parseDate: function(a, b) {
                var e = f.parseTime(a, b, !0);
                return new Date(parseInt(e.y, 10), parseInt(e.m, 10) - 1, parseInt(e.d, 10), parseInt(e.h, 10), parseInt(e.mi, 10), parseInt(e.s, 10))
            },
            create: function(a) {
                var b = document.createElement("div"),
                e = [];
                fish.all(b).html(a);
                for (a = 0; a < b.childNodes.length; a++) 1 === b.childNodes[a].nodeType && e.push(b.childNodes[a]);
                return fish.all(e)
            }
        };
        "getBoundingClientRect" in document.documentElement ? D.offset = function(a) {
            var b, e = 0,
            c = 0;
            a && (b = f.one(a).offset());
            if ((a = this[0]) && a.getBoundingClientRect) {
                var d;
                try {
                    d = a.getBoundingClientRect();
                    var m = a.ownerDocument,
                    h = m.body,
                    l = m.documentElement,
                    k = l.clientLeft || h.clientLeft || 0,
                    e = d.top + (self.pageYOffset || H.boxModel && l.scrollTop || h.scrollTop) - (l.clientTop || h.clientTop || 0),
                    c = d.left + (self.pageXOffset || H.boxModel && l.scrollLeft || h.scrollLeft) - k
                } catch(n) {
                    c = e = 0
                }
            }
            return {
                top: b ? e - b.top: e,
                left: b ? c - b.left: c
            }
        }: (y(), D.offset = function(a) {
            var b;
            a && (b = f.one(a).offset());
            if (a = this[0]) {
                var e = a.offsetParent,
                c = a.ownerDocument,
                d, h = c.documentElement,
                l = c.body,
                k = c.defaultView;
                d = k ? k.getComputedStyle(a, null) : a.currentStyle;
                for (var c = a.offsetTop,
                n = a.offsetLeft; (a = a.parentNode) && (a !== l && a !== h) && !(y.supportsFixedPosition && "fixed" === d.position);) {
                    d = k ? k.getComputedStyle(a, null) : a.currentStyle;
                    c -= a.scrollTop;
                    n -= a.scrollLeft;
                    if (a === e) {
                        c += a.offsetTop;
                        n += a.offsetLeft;
                        if (y.doesNotAddBorder && (!y.doesAddBorderForTableAndCells || !/^t(able|d|h)$/i.test(a.nodeName))) c += parseFloat(d.borderTopWidth) || 0,
                        n += parseFloat(d.borderLeftWidth) || 0;
                        e = a.offsetParent
                    }
                    y.subtractsBorderForOverflowNotVisible && "visible" !== d.overflow && (c += parseFloat(d.borderTopWidth) || 0, n += parseFloat(d.borderLeftWidth) || 0)
                }
                if ("relative" === d.position || "static" === d.position) c += l.offsetTop,
                n += l.offsetLeft;
                y.supportsFixedPosition && "fixed" === d.position && (c += Math.max(h.scrollTop, l.scrollTop), n += Math.max(h.scrollLeft, l.scrollLeft))
            }
            return {
                top: b ? c - b.top: c,
                left: b ? n - b.left: n
            }
        }); ["width", "height"].forEach(function(a, b) {
            var d = b ? "Height": "Width";
            D[a] = function(a) {
                a = a ? this.dom(a) : this[0];
                var b;
                try {
                    if (a === K) {
                        var f = u.documentElement;
                        b = self["inner" + d] || f && f["client" + d] || u.body["client" + d]
                    } else if (a === u) b = u.body["scroll" + d];
                    else if ("none" !== (a.currentStyle ? a.currentStyle.display: u.defaultView.getComputedStyle(a, null).getPropertyValue("display"))) b = a["offset" + d] || a["client" + d];
                    else {
                        var h = a.style,
                        l = h.display;
                        h.display = "block";
                        b = a["offset" + d] || a["client" + d];
                        h.display = l
                    }
                } catch(n) {
                    b = 0
                }
                return b
            }
        });
        "click mouseover mouseout submit focus blur keydown keypress keyup change".split(" ").forEach(function(a, b) {
            D[a] = function(b) {
                return f.on(a, b)
            }
        }); ["next", "previous"].forEach(function(a) {
            var b = a + "Sibling";
            D[a] = function(a) {
                if (0 === this.length) return this;
                var c = f.admin.roe(),
                d = 0,
                h;
                c.length = 0;
                "string" === typeof a && ("" !== a && !/\s+/.test(a)) && (a = v(a));
                if (void 0 === a || !0 === a) h = f.isElement;
                else if ("function" === typeof a) h = function(b) {
                    return f.isElement(b) && a(b)
                };
                else return c;
                this.each(function(f, l) {
                    for (f = f[b]; f;) {
                        if (h(f)) {
                            for (var n = f,
                            k = 0; k < d && c[k] !== n; k++);
                            k === d && (c[d++] = n);
                            if (void 0 === a) break
                        }
                        f = f[b]
                    }
                });
                c.length = d;
                return c
            }
        });
        D.sibling = function(a) {
            var b = this.previous(a);
            a = this.next(a);
            for (var d = b.length,
            c = 0,
            f = a.length; c < f; c++) b[d++] = a[c];
            b.length = d;
            return b
        };
        D.children = function(a) {
            if (0 === this.length) return this;
            var b, d, c, g;
            if ("function" === typeof a) b = function(b) {
                return f.isElement(b) && a(b)
            };
            else if (void 0 === a) b = f.isElement;
            else {
                d = f.all(a, this[0]);
                c = 1;
                for (g = this.length; c < g; c++) d.add(f.all(a, this[c]));
                return d
            }
            d = f.admin.roe();
            var h = 0;
            this.each(function(a) {
                a = a.childNodes;
                c = 0;
                for (g = a.length; c < g; c++) b(a[c]) && (d[h++] = a[c])
            });
            d.length = h;
            return d
        };
        D.clone = function(a) {
            if (0 === this.length) return this;
            var b = fish.browser(),
            d,
            c = document.createDocumentFragment().appendChild(document.createElement("div"));
            d = "ms" == b.name && 9 > b.version ?
            function(b) {
                c.innerHTML = b.outerHTML.replace(RegExp("(^|\\s)" + B.hook + '="\\d+"'), "");
                b = c.firstChild;
                "function" === typeof a && a(b);
                c.removeChild(b);
                return b
            }: function(b) {
                b = b.cloneNode(!0);
                "function" === typeof a && a(b);
                return b
            };
            roe = f.admin.roe();
            var g = 0;
            this.each(function(a) {
                roe[g++] = d(a)
            });
            roe.length = g;
            return roe
        }; ["Left", "Top"].forEach(function(a, b) {
            var d = b ? "scrollTop": "scrollLeft";
            D["scroll" + a] = function(a) {
                if (a = a ? this.dom(a) : this[0]) return a = (elemN = a && "object" === typeof a && "setInterval" in a ? a: 9 === a.nodeType ? a.defaultView || a.parentWindow: !1) ? "pageXOffset" in elemN ? elemN[b ? "pageYOffset": "pageXOffset"] : H.boxModel && elemN.document.documentElement[d] || elemN.document.body[d] : a[d]
            }
        });
        fish.extend(D, !0);
        var G = /(opera)(?:.*version)?[ \/]([\w.]+)/,
        O = /(msie) ([\w.]+)/,
        P = /(mozilla)(?:.*? rv:([\w.]+))?/,
        N = navigator.userAgent.toLowerCase(),
        G = /(webkit)[ \/]([\w.]+)/.exec(N) || G.exec(N) || O.exec(N) || 0 > N.indexOf("compatible") && P.exec(N) || [];
        G[1] = G[1].replace("msie", "ms").replace("mozilla", "moz").replace("opera", "o");
        G[2] = parseFloat(G[2], 10);
        var H = {
            name: G[1] || "",
            version: G[2] && parseFloat(G[2]) || 0,
            boxModel: !1
        };
        f.ready && f.ready(function() {
            var a = document.createElement("div");
            a.style.width = a.style.paddingLeft = "1px";
            document.body.appendChild(a);
            H.boxModel = 2 === a.offsetWidth;
            a.parentNode.removeChild(a)
        })
    })(); (function() {
        function d(f, l, k) {
            return ("string" === typeof l ? l: l.toString()).replace(f.define || r,
            function(d, f, h, l) {
                0 === f.indexOf("def.") && (f = f.substring(4));
                f in k || (k[f] = ":" === h ? l: (new Function("def", "return " + l))(k));
                return ""
            }).replace(f.use || r,
            function(l, n) {
                if ("def.temp" === n) throw Error("forbin def.temp in template");
                var p;
                return (p = 0 === n.indexOf("def.") ? k[n.substring(4)] : eval(n)) ? d(f, p, k) : p
            })
        }
        function f(d) {
            return d.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ")
        }
        var n = {
            version: "0.2.0",
            templateSettings: {
                evaluate: /\{\{([\s\S]+?)\}\}/g,
                interpolate: /\{\{=([\s\S]+?)\}\}/g,
                encode: /\{\{!([\s\S]+?)\}\}/g,
                use: /\{\{#([\s\S]+?)\}\}/g,
                define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
                conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,
                iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
                varname: "it",
                strip: !0,
                append: !0,
                selfcontained: !1
            },
            cache: {},
            template: void 0
        },
        p = {
            start: "'+(",
            end: ")+'",
            startencode: "'+fish.encodeHTML("
        },
        k = {
            start: "';out+=(",
            end: ");out+='",
            startencode: "';out+=fish.encodeHTML("
        },
        r = /$^/;
        n.template = function(h, t) {
            var q = n.templateSettings,
            u, z, x = q.append ? p: k,
            v,
            w = 0,
            A;
            if (t) {
                if (v = d(q, h, t), !(z = n.cache[v])) u = v
            } else if (! (z = n.cache[h])) u = h,
            v = d(q, h, {});
            z || (v = ("var out='" + (q.strip ? v.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, " ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, "") : v).replace(/'|\\/g, "\\$&").replace(q.interpolate || r,
            function(d, h) {
                return x.start + f(h) + x.end
            }).replace(q.encode || r,
            function(d, h) {
                return x.startencode + f(h) + x.end
            }).replace(q.conditional || r,
            function(d, h, k) {
                return h ? k ? "';}else if(" + f(k) + "){out+='": "';}else{out+='": k ? "';if(" + f(k) + "){out+='": "';}out+='"
            }).replace(q.iterate || r,
            function(d, h, k, n) {
                if (!h) return "';} } out+='";
                w += 1;
                A = n || "i" + w;
                h = f(h);
                return "';var arr" + w + "=" + h + ";if(arr" + w + "){var " + k + "," + A + "=-1,l" + w + "=arr" + w + ".length-1;while(" + A + "<l" + w + "){" + k + "=arr" + w + "[" + A + "+=1];out+='"
            }).replace(q.evaluate || r,
            function(d, h) {
                return "';" + f(h) + "out+='"
            }) + "';return out;").replace(/\n/g, "\\n").replace(/\t/g, "\\t").replace(/\r/g, "\\r").replace(/(\s|;|}|^|{)out\+='';/g, "$1").replace(/\+''/g, "").replace(/(\s|;|}|^|{)out\+=''\+/g, "$1out+="));
            try {
                return z || (z = new Function(q.varname, v), n.cache[u] = z),
                z
            } catch(E) {
                throw "undefined" !== typeof console && console.log("Could not create a template function: " + v),
                E;
            }
        };
        fish.extend({
            template: function(d, f) {
                var k = d.temp;
                if ("string" === typeof d) return f ? n.template(d)(f) : n.template(d);
                if ("object" === typeof d) return fish.lang.extend(n.templateSettings, d),
                f ? n.template(k, d)(f) : n.template(k, d)
            },
            encodeHTML: function() {
                var d = {
                    "&": "&#38;",
                    "<": "&#60;",
                    ">": "&#62;",
                    '"': "&#34;",
                    "'": "&#39;",
                    "/": "&#47;"
                },
                f = /&(?!#?\w+;)|<|>|"|'|\//g;
                return function(k) {
                    return k ? k.toString().replace(f,
                    function(f) {
                        return d[f] || f
                    }) : k
                }
            } ()
        },
        !0)
    })()
})(document, window);